package com.rockwell.sniffyhunter.utils;

import com.rockwell.sniffyhunter.model.UnloadMazeLocator;

public enum UnloadMazeLocatorState implements IStateMachine {
	START {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return SCAN;
		}
	},
	SCAN {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).scan();
		}
	},
	JOG {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).jog();
		}
	},
	STOP_JOG {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).stopJog();
		}
	},
	NAV_AWAY_FROM_OBS {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).navAwayFromObs();
		}
	},
	REVERSE_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).reverseDueToPlayWall();
		}
	},
	TURN_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).turnDueToPlayWall();
		}
	},
	SCAN_AFTER_TURN_DUE_TO_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).scanAfterTurnDueToPlayWall();
		}
	},
	MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).moveToNextScanRow();
		}
	},
	SCAN_AFTER_MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).scanAfterMoveToNextScanRow();
		}
	},
	TURN_AFTER_MOVE_TO_NEXT_SCAN_ROW {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).turnAfterMoveToNextScanRow();
		}
	},
	TURN_DUE_TO_CORNER_PLAY_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).turnDueToCornerPlayWall();
		}
	},
	REVERSE_DUE_TO_CORNER_WALL {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).reverseDueToCornerWall();
		}
	},
	TURN_DUE_TO_CORNER_PLAY_WALL_DETECTED_BY_FRONT_SIDE_SENSORS {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).turnDueToCornerPlayWallDetectedByFrontAndSideSensors();
		}
	},
	CHECK_MAZE_POS {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).CheckMazePos();
		}
	},
	ROTATE_TO_CENTER_MAZE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).rotateToCenterMaze();
		}
	},
	INDEX_TO_CENTER_MAZE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).indexToCenterMaze();
		}
	},
	JOG_STOPPED_TO_PICK_TREASURE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).jogStoppedToPickTreasure();
		}
	},
	PICK_TREASURE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return ((UnloadMazeLocator)stateObject).pickTreasure();
		}
	},
	DONE {
		@Override
		public
		IStateMachine doAction(IStateObject stateObject) {
			return START;
		}
	};
}
